"""
@author: wangzhongren
@file: ATM.py
@time: 2023/12/7 9:20
"""
USERS = {}  # 存储所有用户信息的字典


def register():
    """注册新用户"""
    while True:
        username = input("请输入用户名：")
        if username in USERS:
            print("该用户名已被注册，请重新输入！")
            continue
        password = input("请输入密码：")
        balance = float(input("请输入初始金额："))
        USERS[username] = {"password": password, "balance": balance}
        print(f"{username}，您已成功注册！")
        break


def login():
    """用户登录"""
    while True:
        username = input("请输入用户名：")
        if username not in USERS:
            print("用户不存在，请注册后再登录！")
            continue
        password = input("请输入密码：")
        if password == USERS[username]["password"]:
            print(f"{username}，您已成功登录！")
            return username
        else:
            print("密码错误，请重新输入！")


def deposit(username):
    """存钱"""
    while True:
        amount = input("请输入存款金额：")
        if not amount.isdigit():
            print("请输入有效数字！")
            continue
        USERS[username]["balance"] += float(amount)
        print(f"{username}，您已成功存入{amount}元！")
        break


def withdraw(username):
    """取钱"""
    while True:
        amount = input("请输入取款金额：")
        if not amount.isdigit():
            print("请输入有效数字！")
            continue
        if float(amount) > USERS[username]["balance"]:
            print("余额不足，无法取款！")
            continue
        USERS[username]["balance"] -= float(amount)
        print(f"{username}，您已成功取出{amount}元！")
        break


def transfer(username):
    """转账"""
    while True:
        target_username = input("请输入接收转账的用户名：")
        if target_username not in USERS:
            print("接收转账的用户不存在，请重新输入！")
            continue
        amount = input("请输入转账金额：")
        if not amount.isdigit():
            print("请输入有效数字！")
            continue
        if float(amount) > USERS[username]["balance"]:
            print("余额不足，无法转账！")
            continue
        USERS[username]["balance"] -= float(amount)
        USERS[target_username]["balance"] += float(amount)
        print(f"{username}，您已成功给{target_username}转账{amount}元！")
        break


def main():
    """主程序"""
    while True:
        print("\n欢迎使用ATM系统，请选择操作：")
        print("1. 注册")
        print("2. 登录")
        print("3. 退出")
        choice = input()
        if choice == "1":
            register()
        elif choice == "2":
            if not USERS:  # 如果没有用户注册，则无法登录
                print("当前没有用户，请先注册！")
                continue
            username = login()  # 登录并返回用户名
            while True:  # 登录后的操作循环
                print("\n请选择操作：")
                print("1. 存钱")
                print("2. 取钱")
                print("3. 转账")
                print("4. 退出")
                sub_choice = input()
                if sub_choice == "1":
                    deposit(
                        username)  # 调用存钱函数，传入已登录的用户名作为参数进行存款操作。如果需要向其他人账户存钱，可以在函数内部再次询问用户名。这里为了简化逻辑，默认向自己的账户存钱。下面的取钱和转账同理。                    break  # 退出当前循环，返回到主菜单。下面的取钱和转账同理。                elif sub_choice == "2":
                    withdraw(
                        username)  # 取钱操作，默认从已登录的用户账户取钱。如果需要从其他人账户取钱，可以在函数内部再次询问用户名。这里的逻辑可以根据具体需求进行更改。                    break  # 同上，退出当前循环。                elif sub_choice == "3":
                    transfer(username)  # 转账操作，默认从已登录的用户账户转出